# -*- coding:utf-8 -*-
# 递归
# 函数内部，自己调用自己
# 必须要有出口

# 没有出口死循环
# def func1():
#     print("你好")
#     func1()
#
# func1()

# 递归
def func(num):
    if num == 1:
        return 1
    result = num + func(num - 1)
    return result

print(func(3))
print(func(100))

# 第一次执行
"""
result = 3 + func(2)
return result
返回 6
"""

# 第二次执行 执行func(2)
"""
result = 2 + func(1)
return result 
返回 3
"""

# 第三次执行 执行func(1)
# 返回了一个 1

# 从外往内执行3次

# 第三次调用执行 返回1
# 第二次调用执行 返回 result = 2 + 第三次调用(1)   返回3
# 第一次调用执行 返回 result = num + 第二次调用(3)  返回6


# 递归三原则：
# 递归必须有停止条件
# 递归必须改变其状态并向停止条件靠近
# 递归必须递归地调用自己
